#include <stdio.h>

int main(void)
{
    FILE *fp;
    char c;

    // FILE* fopen(char* filename, char* mode);
    fp = fopen("readme.md", "r");
    // fopen()返回一个 FILE 指针，其他函数可以用这个指针操作文件。如果无法打开文件（比如文件不存在或没有权限），会返回空指针 NULL。
    if (fp == NULL)
    {
        return -1;
    }

    c = fgetc(fp);
    // EOF 是一个整数值，代表文件结尾，一般是-1
    while (c != EOF)
    {
        printf("%c", c);
        c = fgetc(fp);
    }

    // fclose()用来关闭已经使用fopen()打开的文件
    // int fclose(FILE* stream);
    fclose(fp);

    return 0;
    //     fopen()的模式字符串有以下几种。
    // r：读模式，只用来读取数据。如果文件不存在，返回 NULL 指针。
    // w：写模式，只用来写入数据。如果文件存在，文件长度会被截为0，然后再写入；如果文件不存在，则创建该文件。
    // a：写模式，只用来在文件尾部追加数据。如果文件不存在，则创建该文件。
    // r+：读写模式。如果文件存在，指针指向文件开始处，可以在文件头部添加数据。如果文件不存在，返回 NULL 指针。
    // w+：读写模式。如果文件存在，文件长度会被截为0，然后再写入数据。这种模式实际上读不到数据，反而会擦掉数据。如果文件不存在，则创建该文件。
    // a+：读写模式。如果文件存在，指针指向文件结尾，可以在现有文件末尾添加内容。如果文件不存在，则创建该文件。
}